﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace TestImport.Model.DatabaseRepositories
{
    public abstract partial class DatabaseRepository
    {
        /************/
        /* Rekening */
        /************/

        public DataTable Rekening_GetData()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT rekeningID, datumRekening, totaal, opmerking, voorschot, betaald, leerlingID FROM Rekening");
        }

        public DataTable Rekening_GetDataByRekeningID(int rekeningID)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@rekeningID", rekeningID);
                dbManager.ExecuteReader(CommandType.Text, "SELECT rekeningID, datumRekening, totaal, opmerking, voorschot, betaald, leerlingID FROM Rekening WHERE (rekeningID = @rekeningID)");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public DataTable Rekening_GetAantalRekeningen()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT COUNT(*) FROM Rekening");
        }

        public DataTable Rekening_GetMaxRekeningID()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT MAX(rekeningID) AS maximum FROM Rekening");
        }

        public void Rekening_UpdateAnnuleerRekening(int rekeningID)
        {
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@rekeningID", rekeningID);
                dbManager.ExecuteNonQuery(CommandType.Text, "UPDATE Rekening SET totaal = 0, opmerking = 'REKENING GEANNULEERD (GROEPSWIJZIGING)' WHERE (rekeningID = @rekeningID)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public void Rekening_UpdateTotaal(int totaal, int rekeningID)
        {
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(2);
                dbManager.AddParameters(0, "@totaal", totaal);
                dbManager.AddParameters(1, "@rekeningID", rekeningID);
                dbManager.ExecuteNonQuery(CommandType.Text, "UPDATE Rekening SET totaal = @totaal WHERE (rekeningID = @rekeningID)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public bool Rekening_Truncate()
        {
            bool succeed = false;
            try
            {
                dbManager.Open();
                dbManager.ExecuteNonQuery(CommandType.Text, "TRUNCATE TABLE Rekening");
                succeed = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return succeed;
        }

        public void Rekening_Insert(DateTime datumRekening, decimal totaal, string opmerking, decimal voorschot, decimal betaald, int leerlingID)
        {
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(6);
                dbManager.AddParameters(0, "@datumRekening", datumRekening);
                dbManager.AddParameters(1, "@totaal", totaal);
                dbManager.AddParameters(2, "@opmerking", opmerking);
                dbManager.AddParameters(3, "@voorschot", voorschot);
                dbManager.AddParameters(4, "@betaald", betaald);
                dbManager.AddParameters(5, "@leerlingID", leerlingID);
                dbManager.ExecuteNonQuery(CommandType.Text, "INSERT INTO Rekening (datumRekening, totaal, opmerking, voorschot, betaald, leerlingID) VALUES (?, ?, ?, ?,?,?)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }
    }
}
